package main

import (
	"flag"
	"fmt"
	"os"
	"text/tabwriter"
)

const usageTemplate = `Deployer - 基于Docker Swarm的Java应用自动化部署工具

使用方法:
  deployer [选项]

选项:
  基本配置:
    -s, --service string        指定服务名称（必填）
    -p, --port int             指定服务端口（默认：8080）
    -e, --env string           指定运行环境 [prod/test]（默认：prod）
    -r, --replicas int         指定服务副本数（默认：2）

  代码配置:
    -g, --repo string          指定代码仓库地址（必填）
    -b, --branch string        指定代码分支（必填）

  构建配置:
    --builder string           指定构建工具 [maven/gradle]（默认：maven）
    -j, --jdk string          指定JDK版本 [8/11]（默认：8）
    -m, --mirror string       指定Docker镜像源（默认：public.ecr.aws/docker/library）

  资源配置:
    --cpu-limit string        指定CPU上限（默认：1）
    --cpu-request string      指定CPU预留（默认：0.5）
    --memory-limit string     指定内存上限（默认：2048M）
    --memory-request string   指定内存预留（默认：1024M）

  健康检查:
    --health                  是否启用健康检查（默认：true）
    --health-endpoint string  指定健康检查接口路径（默认：/check）

  其他:
    -d, --debug              开启调试模式
    -v, --version            显示版本信息
    -h, --help              显示帮助信息

示例:
  1. 基本部署（Maven构建）:
     deployer --service my-service \
             --repo git@gitee.com:user/my-service.git \
             --branch master \
             --port 8080 \
             --env prod \
             --replicas 2

  2. 使用Gradle构建:
     deployer --service my-service \
             --repo git@gitee.com:user/my-service.git \
             --branch master \
             --builder gradle

  3. 自定义资源限制:
     deployer --service my-service \
             --repo git@gitee.com:user/my-service.git \
             --branch master \
             --cpu-limit 2 \
             --memory-limit 4096M

  4. 自定义健康检查:
     deployer --service my-service \
             --repo git@gitee.com:user/my-service.git \
             --branch master \
             --health-endpoint /health

注意事项:
  1. 确保Docker Swarm已初始化
  2. 确保SSH密钥已配置
  3. 确保有足够的系统资源
  4. 生产环境建议使用稳定版本的分支或标签
`

// 初始化命令行帮助
func initUsage() {
	flag.Usage = func() {
		w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
		fmt.Fprintln(w, usageTemplate)
		w.Flush()
	}

	// 设置短选项别名
	flag.StringVar(service, "s", *service, "指定服务名称")
	flag.StringVar(repo, "g", *repo, "指定代码仓库地址")
	flag.StringVar(branch, "b", *branch, "指定代码分支")
	flag.StringVar(jdk, "j", *jdk, "指定JDK版本")
	flag.StringVar(mirror, "m", *mirror, "指定Docker镜像源")
	flag.BoolVar(debug, "d", *debug, "开启调试模式")
	flag.BoolVar(version, "v", *version, "显示版本信息")
}

// 打印使用示例
func printExamples() {
	fmt.Println(`使用示例:

1. 部署Spring Boot应用:
   deployer --service spring-demo \
           --repo git@gitee.com:user/spring-demo.git \
           --branch master \
           --port 8080 \
           --env prod \
           --replicas 2

2. 部署测试环境:
   deployer --service spring-demo \
           --repo git@gitee.com:user/spring-demo.git \
           --branch develop \
           --env test \
           --replicas 1 \
           --debug

更多示例请参考 --help
`)
}
